package 蓝桥._2024.五子棋对弈;

import java.util.Arrays;
import java.util.Scanner;

import static java.lang.System.exit;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {

    static int total=0;
    // 25个下满，13个白，12个黑
    // m[][] : 棋盘，0为白，1为黑，
    static void dfs(int[][] m, int order,int white, int black){
      // 终止条件
      if(order==25){
          if(white==0&&black==0&&isDraw(m)){
              total++;
          }
            return;
      }
        // 第order个是否下黑子
        int i = order/5, j = order%5;
        if(black > 0){
            // 下黑子
            m[i][j] = 1;
            dfs(m, order+1,white, black-1);
            m[i][j] = 0;
        }
        if(white > 0){
            // 下白子
            m[i][j] = 0;
            dfs(m, order+1,white-1, black);
            m[i][j] = 0;
        }
    }

    // 判断该局面是否是平局
    static boolean isDraw(int[][] m){
        for(int i=0; i<5; i++){
            int sum_row = 0, sum_col = 0;
            for(int j=0; j<5; j++){
                sum_row += m[i][j];
                sum_col += m[j][i];
            }
            if(sum_row == 5 || sum_col == 5 || sum_row == 0 || sum_col == 0)
                return false;
        }
        int sum_diag1 = 0, sum_diag2 = 0;
        for(int i=0; i<5; i++){
            sum_diag1 += m[i][i];
            sum_diag2 += m[i][4-i];
        }
        return !(sum_diag1 == 5 || sum_diag2 == 5 || sum_diag1 == 0 || sum_diag2 == 0);
    }

    public static void main(String[] args) {
        // 类似皇后，DFS暴力回溯
        int[][] m = new int[5][5];
        dfs(m,0,13,12);
        System.out.println(total);
    }
}